﻿#pragma once
#ifndef WRWORKDEVICECOLLECTION_H
#define WRWORKDEVICECOLLECTION_H

#include "WRGlobal.h"
#include "../WRSoft-Utility/Runtime/WRType.h"
#include "../WRSoft-Utility/Structs/WRArray.h"

//表示工作设备类。
class WRWorkDevice;
//表示工作模块类。
class WRWorkDriver;

//表示工作设备集合。
class WRSOFT_WORKING_COMMON_CLASS WRWorkDeviceCollection
{
private:
    //表示集合项目。
    class Entry
    {
    private:
        QUuid m_uuid;
        WRArray<WRWorkDevice*> m_data;

    public:
        //初始化空集合项目 。
        inline Entry(void)
        {
            //add code here
        }

        //初始化集合项目。
        inline Entry(const QUuid& uuid, const WRArray<WRWorkDevice*>& data)
            : m_uuid(uuid), m_data(data)
        {
            //add code here
        }

        //复制构造函数。
        inline Entry(const Entry& other)
            : m_uuid(other.m_uuid), m_data(other.m_data)
        {
            //add code here
        }
        //赋值操作符。
        inline Entry& operator=(const Entry& other)
        {
            if (&other != this)
            {
                m_uuid = other.m_uuid;
                m_data = other.m_data;
            }
            return *this;
        }

        //获取标识。
        inline const QUuid& uuid(void) const
        {
            return m_uuid;
        }
        //获取数据。
        inline const WRArray<WRWorkDevice*>& data(void) const
        {
            return m_data;
        }

        //获取数据对象数量。
        inline WRu count(void) const
        {
            return m_data.count();
        }
        //获取指定索引的数据对象。
        inline WRWorkDevice* index(WRu i) const
        {
            return m_data[i];
        }
    };
    //工作设备集合。
    WRArray<Entry> m_array;

public:
    //初始化空集合。
    inline WRWorkDeviceCollection(void)
    {
        //add code here
    }
    //初始化工作设备集合。
    explicit WRWorkDeviceCollection(const WRArray<WRWorkDriver*>& drivers);

    //复制构造函数。
    inline WRWorkDeviceCollection(const WRWorkDeviceCollection& other)
        : m_array(other.m_array)
    {
        //add code here
    }
    //赋值操作符。
    inline WRWorkDeviceCollection& operator=(const WRWorkDeviceCollection& other)
    {
        if (&other != this)
        {
            m_array = other.m_array;
        }
        return *this;
    }

    //获取指定类型的对象集合。
    const WRArray<WRWorkDevice*>& filter(const QUuid& tuid) const;
    //获取指定类型的对象集合。
    inline const WRArray<WRWorkDevice*>& filter(WRType* type = 0) const
    {
        if (!type)
        {
            return filter(QUuid());
        }
        return filter(type->uuid());
    }
};

#endif // WRWORKDEVICECOLLECTION_H
